﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FacadeInterface;
using FacadeImplemention;
using EntityLayer;

namespace pryCallCenter.Procesos.RegistroVentas
{
    public partial class frmRegistroVentasxOperador : System.Web.UI.Page
    {

        private clsIFacadeReporteVentas InterfaceReporteVentas;
        private static List<ReporteVentasxOperador_Result> ReporteVentasxOperador = null;
        private String msg, titulo;

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    if (Session["USUARIO"] == null)
                    {
                        Response.Redirect("~/Account/Login.aspx", false);
                    }
                    txtUsuario.Text = "William Requejo";
                    dtpFecha.Text = "20/05/2013";
                    Fechas();
                }
                LlenardgvOperador();
                LlenardgvProducto();
                LlenardgvClientes();
                String buscar = (Session["buscar"] != null) ? Session["buscar"].ToString() : "";
                GenerarReporteDetalleVenta(buscar);
            }
            catch (Exception ex)
            {
                titulo = "ERROR AL CARGAR LA PAGINA";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        private void Fechas()
        {
            try
            {
                DateTime fechaActual = DateTime.Now;
                String fechaCompleta = fechaActual.ToString("dd/MM/yyyy");
                String fechaInicial = "01/01/" + fechaActual.ToString("yyyy");
                dtpDesde.Text = fechaInicial;
                dtpHasta.Text = fechaCompleta;
            }
            catch (Exception ex)
            {
                titulo = "ERROR AL AGREGAR LAS FECHAS";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        private void LlenardgvOperador()
        {
            try
            {
                InterfaceReporteVentas = new clsFacadeReporteVentas();
                dgvOperador.DataSource = InterfaceReporteVentas.ListarOperadorPersona();
                dgvOperador.DataBind();
            }
            catch (Exception ex)
            {
                titulo = "ERROR AL CARGAR LOS OPERADORES";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        private void LlenardgvProducto()
        {
            try
            {
                InterfaceReporteVentas = new clsFacadeReporteVentas();
                dgvProducto.DataSource = InterfaceReporteVentas.ListarProducto();
                dgvProducto.DataBind();
            }
            catch (Exception ex)
            {
                titulo = "ERRROR AL CARGAR LOS PRODUCTOS";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        private void LlenardgvClientes()
        {
            try
            {
                InterfaceReporteVentas = new clsFacadeReporteVentas();
                dgvClientes.DataSource = InterfaceReporteVentas.ListarClientePersona();
                dgvClientes.DataBind();
            }
            catch (Exception ex)
            {
                titulo = "ERRROR AL CARGAR LOS CLIENTES";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        protected void AgregarOperador(object sender, EventArgs e)
        {
            try
            {
                String codOperador = dgvOperador.GetRowValues(dgvOperador.FocusedRowIndex, "CodigoPersona").ToString();
                String NOM = dgvOperador.GetRowValues(dgvOperador.FocusedRowIndex, "Nombres").ToString();
                String APEPA = dgvOperador.GetRowValues(dgvOperador.FocusedRowIndex, "ApellidoPaterno").ToString();
                String APEMA = dgvOperador.GetRowValues(dgvOperador.FocusedRowIndex, "ApellidoMaterno").ToString();
                hid_codOperador.Text = codOperador;
                txtnomOperador.Text = String.Format("{0} {1}, {2}", APEPA, APEMA, NOM);
                Session["buscar"] = null;
            }
            catch (Exception ex)
            {
                titulo = "ERROR AL AGREGAR EL OPERADOR";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        protected void AgregarCliente(object sender, EventArgs e)
        {
            try
            {
                int ID = Convert.ToInt32(dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "CodigoPersona").ToString());
                String NOM = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "Nombres").ToString();
                String APEPA = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "ApellidoPaterno").ToString();
                String APEMA = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "ApellidoMaterno").ToString();
                txtnomCliente.Text = String.Format("{0} {1}, {2}", APEPA, APEMA, NOM);
                hid_codCliente.Text = ID.ToString();
                Session["buscar"] = null;
            }
            catch (Exception ex)
            {
                titulo = "ERROR AL AGREGAR EL CLIENTE";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        protected void AgregarProducto(object sender, EventArgs e)
        {
            try
            {
                String codProducto = dgvProducto.GetRowValues(dgvProducto.FocusedRowIndex, "CodigoProducto").ToString();
                String nomProducto = dgvProducto.GetRowValues(dgvProducto.FocusedRowIndex, "Descripcion").ToString();
                hid_codProducto.Text = codProducto;
                txtnomProducto.Text = nomProducto;
                Session["buscar"] = null;
            }
            catch (Exception ex)
            {
                titulo = "ERROR AL AGREGAR EL PRODUCTO";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        protected void GenerarReporte(object sender, EventArgs e)
        {
            GenerarReporteDetalleVenta("1");
        }

        private void GenerarReporteDetalleVenta(String buscar)
        {
            try
            {
                if (buscar == "1")
                {
                    int codOperador = (hid_codOperador.Text.Trim() != "") ? Convert.ToInt32(hid_codOperador.Text.Trim()) : 0;
                    String codProducto = (hid_codProducto.Text.Trim() != "") ? hid_codProducto.Text.Trim() : null;
                    int codCliente = (hid_codCliente.Text.Trim() != "") ? Convert.ToInt16(hid_codCliente.Text.Trim()) : 0;
                    String estado = (cboEstado.SelectedItem.Value.ToString() != "") ? cboEstado.SelectedItem.Value.ToString() : null;
                    String fechaDesde = Convert.ToDateTime(dtpDesde.Value).Date.ToString("yyyyMMdd");
                    String fechaHasta = Convert.ToDateTime(dtpHasta.Value).Date.ToString("yyyyMMdd");
                    DetalleVenta(codOperador, codProducto, codCliente, estado, fechaDesde, fechaHasta);
                    Session["buscar"] = "1";
                }
            }
            catch (Exception ex)
            {
                titulo = "ERROR AL GENERAR EL REPORTE DE DETALLE DE VENTA";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        private void DetalleVenta(int codOperador, String codProducto, int codCliente, String estado, String fechaDesde, String fechaHasta)
        {
            try
            {
                ReporteVentasxOperador = new List<ReporteVentasxOperador_Result>();
                InterfaceReporteVentas = new clsFacadeReporteVentas();
                ReporteVentasxOperador = InterfaceReporteVentas.ReporteVentasxOperador(codOperador, codProducto, codCliente, estado, fechaDesde, fechaHasta);
                dgvReporteVentas.DataSource = ReporteVentasxOperador;
                dgvReporteVentas.DataBind();
                Double Total = 0;
                if (ReporteVentasxOperador.Count() > 0)
                {
                    foreach (ReporteVentasxOperador_Result rpt in ReporteVentasxOperador)
                    {
                        Total += Convert.ToDouble(rpt.precio);
                    }
                }
                txtTotal.Text = Total.ToString("C2");
            }
            catch (Exception ex)
            {
                titulo = "ERROR AL GENERAR EL REPORTE";
                msg = ex.Message;
                MostrarComentario(msg, titulo);
            }
        }

        private void MostrarComentario(String msg, String titulo)
        {
            pcMensaje.HeaderText = titulo;
            lblMensaje.Text = msg;
            ScriptManager.RegisterStartupScript(this, GetType(), "script", "pcMensaje.Show();", true);
        }

        protected void BorrarFiltroOperador(object sender, EventArgs e)
        {
            hid_codOperador.Text = "";
            txtnomOperador.Text = "";
        }

        protected void BorrarFiltroProducto(object sender, EventArgs e)
        {
            hid_codProducto.Text = "";
            txtnomProducto.Text = "";
        }

        protected void BorrarFiltroCliente(object sender, EventArgs e)
        {
            hid_codCliente.Text = "";
            txtnomCliente.Text = "";
        }
    }
}